home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ADA Programming Guide
/
ADA Programming Guide.iso
/
ada_gnu
/
adainc
/
a-witeio.ads
< prev
next >
Wrap
Text File
|
1996-01-30
|
15KB
|
513 lines
------------------------------------------------------------------------------
-- --
-- GNAT RUNTIME COMPONENTS --
-- --
-- A D A . W I D E _ T E X T _ I O --
-- --
-- S p e c --
-- --
-- $Revision: 1.7 $ --
-- --
-- This specification is adapted from the Ada Reference Manual for use with --
-- GNAT. In accordance with the copyright of that document, you can freely --
-- copy and modify this specification, provided that if you redistribute a --
-- modified version, any changes that you have made are clearly indicated. --
-- --
------------------------------------------------------------------------------
with Ada.IO_Exceptions;
with System;
with System.Dependent_Constants;
package Ada.Wide_Text_IO is
type File_Type is limited private;
type File_Mode is (In_File, Out_File, Append_File);
type Count is range 0 .. System.Dependent_Constants.Count_Max;
subtype Positive_Count is Count range 1 .. Count'Last;
Unbounded : constant Count := 0;
-- Line and page length
subtype Field is Integer range 0 .. System.Dependent_Constants.Field_Max;
subtype Number_Base is Integer range 2 .. 16;
type Type_Set is (Lower_Case, Upper_Case);
---------------------
-- File Management --
---------------------
procedure Create
(File : in out File_Type;
Mode : in File_Mode := Out_File;
Name : in String := "";
Form : in String := "");
procedure Open
(File : in out File_Type;
Mode : in File_Mode;
Name : in String;
Form : in String := "");
procedure Close (File : in out File_Type);
procedure Delete (File : in out File_Type);
procedure Reset (File : in out File_Type; Mode : in File_Mode);
procedure Reset (File : in out File_Type);
function Mode (File : in File_Type) return File_Mode;
function Name (File : in File_Type) return String;
function Form (File : in File_Type) return String;
function Is_Open (File : in File_Type) return Boolean;
------------------------------------------------------
-- Control of default input, output and error files --
------------------------------------------------------
procedure Set_Input (File : in File_Type);
procedure Set_Output (File : in File_Type);
procedure Set_Error (File : in File_Type);
function Standard_Input return File_Type;
function Standard_Output return File_Type;
function Standard_Error return File_Type;
function Current_Input return File_Type;
function Current_Output return File_Type;
function Current_Error return File_Type;
type File_Access is access constant File_Type;
function Standard_Input return File_Access;
function Standard_Output return File_Access;
function Standard_Error return File_Access;
function Current_Input return File_Access;
function Current_Output return File_Access;
function Current_Error return File_Access;
--------------------
-- Buffer control --
--------------------
procedure Flush (File : in out File_Type);
procedure Flush;
--------------------------------------------
-- Specification of line and page lengths --
--------------------------------------------
procedure Set_Line_Length (File : in File_Type; To : in Count);
procedure Set_Line_Length (To : in Count);
procedure Set_Page_Length (File : in File_Type; To : in Count);
procedure Set_Page_Length (To : in Count);
function Line_Length (File : in File_Type) return Count;
function Line_Length return Count;
function Page_Length (File : in File_Type) return Count;
function Page_Length return Count;
------------------------------------
-- Column, Line, and Page Control --
------------------------------------
procedure New_Line (File : in File_Type; Spacing : in Positive_Count := 1);
procedure New_Line (Spacing : in Positive_Count := 1);
procedure Skip_Line (File : in File_Type; Spacing : in Positive_Count := 1);
procedure Skip_Line (Spacing : in Positive_Count := 1);
function End_Of_Line (File : in File_Type) return Boolean;
function End_Of_Line return Boolean;
procedure New_Page (File : in File_Type);
procedure New_Page;
procedure Skip_Page (File : in File_Type);
procedure Skip_Page;
function End_Of_Page (File : in File_Type) return Boolean;
function End_Of_Page return Boolean;
function End_Of_File (File : in File_Type) return Boolean;
function End_Of_File return Boolean;
procedure Set_Col (File : in File_Type; To : in Positive_Count);
procedure Set_Col (To : in Positive_Count);
procedure Set_Line (File : in File_Type; To : in Positive_Count);
procedure Set_Line (To : in Positive_Count);
function Col (File : in File_Type) return Positive_Count;
function Col return Positive_Count;
function Line (File : in File_Type) return Positive_Count;
function Line return Positive_Count;
function Page (File : in File_Type) return Positive_Count;
function Page return Positive_Count;
-----------------------------
-- Characters Input-Output --
-----------------------------
procedure Get (File : in File_Type; Item : out Wide_Character);
procedure Get (Item : out Wide_Character);
procedure Put (File : in File_Type; Item : in Wide_Character);
procedure Put (Item : in Wide_Character);
procedure Look_Ahead
(File : in File_Type;
Item : out Wide_Character;
End_Of_Line : out Boolean);
procedure Look_Ahead
(Item : out Wide_Character;
End_of_Line : out Boolean);
procedure Get_Immediate
(File : in File_Type;
Item : out Wide_Character);
procedure Get_Immediate
(Item : out Wide_Character);
procedure Get_Immediate
(File : in File_Type;
Item : out Wide_Character;
Available : out Boolean);
procedure Get_Immediate
(Item : out Wide_Character;
Available : out Boolean);
--------------------------
-- Strings Input-Output --
--------------------------
procedure Get (File : in File_Type; Item : out Wide_String);
procedure Get (Item : out Wide_String);
procedure Put (File : in File_Type; Item : in Wide_String);
procedure Put (Item : in Wide_String);
procedure Get_Line
(File : in File_Type;
Item : out Wide_String;
Last : out Natural);
procedure Get_Line
(Item : out Wide_String;
Last : out Natural);
procedure Put_Line
(File : in File_Type;
Item : in Wide_String);
procedure Put_Line
(Item : in Wide_String);
--------------------------------------------------------
-- Generic packages for Input-Output of Integer Types --
--------------------------------------------------------
generic
type Num is range <>;
package Integer_Io is
Default_Width : Field := Num'Width;
Default_Base : Number_Base := 10;
procedure Get
(File : in File_Type;
Item : out Num;
Width : in Field := 0);
procedure Get
(Item : out Num;
Width : in Field := 0);
procedure Put
(File : in File_Type;
Item : in Num;
Width : in Field := Default_Width;
Base : in Number_Base := Default_Base);
procedure Put
(Item : in Num;
Width : in Field := Default_Width;
Base : in Number_Base := Default_Base);
procedure Get
(From : in Wide_String;
Item : out Num;
Last : out Positive);
procedure Put
(To : out Wide_String;
Item : in Num;
Base : in Number_Base := Default_Base);
end Integer_Io;
-----------------------------------
-- Input-Output of Modular Types --
-----------------------------------
generic
type Num is mod <>;
package Modular_IO is
Default_Width : Field := Num'Width;
Default_Base : Number_Base := 10;
procedure Get
(File : in File_Type;
Item : out Num;
Width : in Field := 0);
procedure Get
(Item : out Num;
Width : in Field := 0);
procedure Put
(File : in File_Type;
Item : in Num;
Width : in Field := Default_Width;
Base : in Number_Base := Default_Base);
procedure Put
(Item : in Num;
Width : in Field := Default_Width;
Base : in Number_Base := Default_Base);
procedure Get
(From : in Wide_String;
Item : out Num;
Last : out Positive);
procedure Put
(To : out Wide_String;
Item : in Num;
Base : in Number_Base := Default_Base);
end Modular_IO;
--------------------------------
-- Input-Output of Real Types --
--------------------------------
generic
type Num is digits <>;
package Float_Io is
Default_Fore : Field := 2;
Default_Aft : Field := Num'Digits - 1;
Default_Exp : Field := 3;
procedure Get
(File : in File_Type;
Item : out Num;
Width : in Field := 0);
procedure Get
(Item : out Num;
Width : in Field := 0);
procedure Put
(File : in File_Type;
Item : in Num;
Fore : in Field := Default_Fore;
Aft : in Field := Default_Aft;
Exp : in Field := Default_Exp);
procedure Put
(Item : in Num;
Fore : in Field := Default_Fore;
Aft : in Field := Default_Aft;
Exp : in Field := Default_Exp);
procedure Get
(From : in Wide_String;
Item : out Num;
Last : out Positive);
procedure Put
(To : out Wide_String;
Item : in Num;
Aft : in Field := Default_Aft;
Exp : in Field := Default_Exp);
end Float_Io;
generic
type Num is delta <>;
package Fixed_Io is
Default_Fore : Field := Num'Fore;
Default_Aft : Field := Num'Aft;
Default_Exp : Field := 0;
procedure Get
(File : in File_Type;
Item : out Num;
Width : in Field := 0);
procedure Get
(Item : out Num;
Width : in Field := 0);
procedure Put
(File : in File_Type;
Item : in Num;
Fore : in Field := Default_Fore;
Aft : in Field := Default_Aft;
Exp : in Field := Default_Exp);
procedure Put
(Item : in Num;
Fore : in Field := Default_Fore;
Aft : in Field := Default_Aft;
Exp : in Field := Default_Exp);
procedure Get
(From : in Wide_String;
Item : out Num; Last : out Positive);
procedure Put
(To : out Wide_String;
Item : in Num;
Aft : in Field := Default_Aft;
Exp : in Field := Default_Exp);
end Fixed_Io;
-- generic
-- type Num is delta <> digits <>;
-- package Decimal_IO is
--
-- Default_Fore : Field := Num'Fore;
-- Default_Aft : Field := Num'Aft;
-- Default_Exp : Field := 0;
-- procedure Get
-- (File : in File_Type;
-- Item : out Num;
-- Width : in Field := 0);
-- procedure Get
-- (Item : out Num;
-- Width : in Field := 0);
-- procedure Put
-- (File : in File_Type;
-- Item : in Num;
-- Fore : in Field := Default_Fore;
-- Aft : in Field := Default_Aft;
-- Exp : in Field := Default_Exp);
-- procedure Put
-- (Item : in Num;
-- Fore : in Field := Default_Fore;
-- Aft : in Field := Default_Aft;
-- Exp : in Field := Default_Exp);
-- procedure Get
-- (From : in Wide_String;
-- Item : out Num;
-- Last : out Positive);
-- procedure Put
-- (To : out Wide_String;
-- Item : in Num;
-- Aft : in Field := Default_Aft;
-- Exp : in Field := Default_Exp);
--
-- end Decimal_IO;
---------------------------------------
-- Input-Output of Enumeration Types --
---------------------------------------
generic
type Enum is (<>);
package Enumeration_Io is
Default_Width : Field := 0;
Default_Setting : Type_Set := Upper_Case;
procedure Get (File : in File_Type; Item : out Enum);
procedure Get (Item : out Enum);
procedure Put
(File : in File_Type;
Item : in Enum;
Width : in Field := Default_Width;
Set : in Type_Set := Default_Setting);
procedure Put
(Item : in Enum;
Width : in Field := Default_Width;
Set : in Type_Set := Default_Setting);
procedure Get
(From : in Wide_String;
Item : out Enum;
Last : out positive);
procedure Put
(To : out Wide_String;
Item : in Enum;
Set : in Type_Set := Default_Setting);
end Enumeration_Io;
-- Exceptions
Status_Error : exception renames IO_Exceptions.Status_Error;
Mode_Error : exception renames IO_Exceptions.Mode_Error;
Name_Error : exception renames IO_Exceptions.Name_Error;
Use_Error : exception renames IO_Exceptions.Use_Error;
Device_Error : exception renames IO_Exceptions.Device_Error;
End_Error : exception renames IO_Exceptions.End_Error;
Data_Error : exception renames IO_Exceptions.Data_Error;
Layout_Error : exception renames IO_Exceptions.Layout_Error;
private
type File_Ptr is new System.Address;
type Pstring is access String;
-- Ada File Control Block
type AFCB is record
AFCB_In_Use : Boolean;
Desc : File_Ptr;
Name : Pstring;
Form : Pstring;
Mode : File_Mode;
Page : Count;
Line : Count;
Col : Positive_Count;
Line_Length : Count;
Page_Length : Count;
Count : Integer;
Is_Keyboard : Boolean;
Look_Ahead : String (1 .. 3);
end record;
type File_Type is access AFCB;
end Ada.Wide_Text_IO;